package ctr.commun;

import java.util.ArrayList;

import jdbc.Connexion;
import metier.AffectEleve;
import metier.Affectation;
import metier.CategorieStage;
import metier.Eleve;
import metier.Fonction;
import metier.Grade;
import metier.Matiere;
import metier.NoteEleve;
import metier.Promotion;
import metier.Stage;
import metier.jdbc.affectation.AffectEleveJdbc;
import metier.jdbc.affectation.AffectationJdbc;
import metier.jdbc.eleve.FonctionJdbc;
import metier.jdbc.grade.GradeJdbc;
import metier.jdbc.grade.PromotionJdbc;
import metier.jdbc.note.MatiereJDBC;
import metier.jdbc.note.NoteEleveJdbc;
import metier.jdbc.stage.CategorieStageJdbc;
import metier.jdbc.stage.StageJdbc;

public class CommunGest {
	
	/**
	 * Retourne la liste des eleves
	 * @param stage
	 * @return
	 */
	public ArrayList<Eleve> getListeEleve(Stage stage){
		 return StageJdbc.rechercherListeStageEleve(Connexion.getConnexion(), stage);
	}

	/**
	 * Retourne la liste des stages
	 * @return
	 */
	public ArrayList<Stage> getListeStage() {
		return StageJdbc.getListeStage(Connexion.getConnexion());
	}

	/**
	 * Retourne la liste des grades
	 * @return
	 */
	public ArrayList<Grade> getListeGrade() {
		return GradeJdbc.getListeGrade(Connexion.getConnexion());
	}
	
	/**
	 * Retourne un grade par son id
	 * @param id
	 * @return
	 */
	public Grade getGrade(int id){
		return GradeJdbc.getGradeById(Connexion.getConnexion(), id);
	}
	
	/**
	 * Retourne un stage par son id
	 * @param id
	 * @return
	 */
	public Stage getStage(int id){
		return StageJdbc.rechercherById(Connexion.getConnexion(), id);
	}
	
	/**
	 * Retourne une affectation par son id
	 * @param id
	 * @return
	 */
	public Affectation getAffectation(int id){
		return AffectationJdbc.getAffectation(Connexion.getConnexion(), id);
	}
	
	/**
	 * Retourne une fonction par son id
	 * @param id
	 * @return
	 */
	public Fonction getFonction(int id){
		return FonctionJdbc.getFonctionById(Connexion.getConnexion(), id);
	}
	
	/**
	 * Retourne un libelle matiere par son id
	 */
	public Matiere getLibelleMatiereById(int id) {
		return MatiereJDBC.getMatiereById(Connexion.getConnexion(), id);
	}

	/**
	 * Retourne la liste des categories de stage.
	 * @return
	 */
	public ArrayList<CategorieStage> getListeCategorieStage() {
		return CategorieStageJdbc.getListeCategorieStage(Connexion.getConnexion());
	}
	
	/**
	 * Retourne la liste des affectations.
	 * @return
	 */
	public ArrayList<Affectation> getListeAffectation() {
		return AffectationJdbc.getListeAffectation(jdbc.Connexion.getConnexion());
	}
	
	/**
	 * Retourne la liste des fonctions.
	 * @return
	 */
	public ArrayList<Fonction> getListeFonction() {
		return FonctionJdbc.getListeFonction(Connexion.getConnexion());
	}
	
	/**
	 * Retourne la liste des matieres
	 * @return
	 */
	public ArrayList<Matiere> getListeMatiere() {
		return MatiereJDBC.getListeMatiere(Connexion.getConnexion());
	}
	
	/**
	 * retourne la liste des notes d'un eleve pour une matiere
	 * @return
	 */
	public ArrayList<NoteEleve> getListeNoteEleveByMatiere(Eleve eleve,Matiere matiere) {
		return NoteEleveJdbc.getListNoteEleveByMatiere(Connexion.getConnexion(), eleve, matiere);
	}
	
	/**
	 * retourne la liste des notes pour un eleve
	 * @return
	 */
	public ArrayList<NoteEleve> getListeNoteByEleve(Eleve eleve) {
		return NoteEleveJdbc.getListNoteParEleve(Connexion.getConnexion(), eleve.getIdEleve());
	}
	
	
	/**
	 * Retourne l'historique des promotions d'un eleve.
	 * @return
	 */
	public ArrayList<Promotion> getHistoPromo(int idEleve) {
		return PromotionJdbc.getHistoPromotion(Connexion.getConnexion(), idEleve);
	}
	
	/**
	 * Retourne l'historique des affectations d'un eleve.
	 * @return
	 */
	public ArrayList<AffectEleve> getListeAffectEleve(int idEleve) {
		return AffectEleveJdbc.getListeAffectEleve(Connexion.getConnexion(), idEleve);
	}
}